class TokenManager {
	constructor() {
		// 存储 token 的键名
		this.TOKEN_KEY = 'token';
		// 存储 token 过期时间的键名
		this.EXPIRE_TIME_KEY = 'expires_in';
	}

	/**
	 * 存储 token 及其过期时间
	 * @param {string} token - 认证 token
	 * @param {number} expireIn - token 过期时间（秒）
	 */
	setToken(token, expireIn) {
		const expireTime = Date.now() + expireIn * 1000;
		uni.setStorageSync(this.TOKEN_KEY, token);
		uni.setStorageSync(this.EXPIRE_TIME_KEY, expireTime);
	}

	/**
	 * 获取存储的 token
	 * @returns {string|null} - 如果 token 未过期则返回 token，否则返回 null
	 */
	getToken() {
		const token = uni.getStorageSync(this.TOKEN_KEY);
		const expireTime = uni.getStorageSync(this.EXPIRE_TIME_KEY);

		if (token && expireTime && Date.now() < expireTime) {
			return token;
		}
		this.clearToken();
		return null;
	}

	/**
	 * 清除存储的 token 及其过期时间
	 */
	clearToken() {
		uni.removeStorageSync(this.TOKEN_KEY);
		uni.removeStorageSync(this.EXPIRE_TIME_KEY);
	}

	/**
	 * 检查 token 是否过期
	 * @returns {boolean} - 如果 token 过期返回 true，否则返回 false
	 */
	isTokenExpired() {
		const expireTime = uni.getStorageSync(this.EXPIRE_TIME_KEY);
		return !expireTime || Date.now() >= expireTime;
	}
}

// 导出单例对象
export default new TokenManager();
